﻿Public Interface ILeilaoNegoc

    Sub SalvarPessoa(ByRef _pessoa As Pessoa)

    Function GerarUsuarioDesabilitado(ByRef _pessoa As Pessoa) As Usuario

    Sub EnviarEmailParaHabilitacao(ByRef _usuario As Usuario)

    Function SalvarPeca(ByVal _descricao As String, ByVal _proprietario As Usuario) As Peca

    Function SalvarImagemPeca(ByVal _peca As Peca, ByVal _descricao As String, ByVal _bytes As Byte(), ByVal _extensao As String) As ImagemPeca

    Sub AtribuirPalavraChave(ByRef _peca As Peca, ByVal _palavraChave As PalavraChave)

    Sub AtribuirCategoria(ByRef _peca As Peca, ByVal _categoria As CategoriaPeca)

    Sub AtribuirTipoMaterial(ByRef _peca As Peca, ByVal _material As TipoMaterial)

    Function CadastrarMoeda(ByVal _cifra As String, ByVal _nome As String) As Moeda

    Function CadastrarCategoriaPeca(ByVal _codigo As String, ByVal _descricao As String) As CategoriaPeca

    ''' <summary>
    ''' http://blog.webnode.com.br/2013/02/28/como-escrever-uma-boa-descricao-de-produto-para-sua-loja-virtual/
    ''' http://support.webnode.com/index.php?/Knowledgebase/List/Index/118/seo---otimizao-para-buscas
    ''' http://www.cursodeecommerce.com.br/blog/o-que-e-cauda-longa-nas-buscas/
    ''' http://ecommercenews.com.br/artigos/tutoriais/5-dicas-para-uma-boa-descricao-do-produto
    ''' </summary>
    ''' <param name="_palavra"></param>
    ''' <param name="_descricao"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function CadastrarPalavraChave(ByVal _palavra As String, ByVal _descricao As String) As PalavraChave

    Function CadastrarTipoMaterial(ByVal _tipoMaterial As String, ByVal _descricao As String) As TipoMaterial

    'Function ConfigurarCotacaoMoeda(ByVal _moedaRef As Moeda, ByVal _multiplicador As Decimal, ByVal _moedaEstrangeira As Decimal) As Cotacao

    Sub RecebeLance(ByVal _lance As Lance, ByVal _lote As Lote)

    Function SalvarComissao(ByVal _tipo As TipoComissao, ByVal _valor As Decimal) As Comissao

    Function BuscarLotes(ByVal _leilao As Dominio.Leilao) As IList(Of Lote)

    Function AdicionaPecaAoLote(ByVal _lote As Lote, ByVal _peca As Peca) As Lote

    Function RemovePecaDoLote(ByVal _lote As Lote, ByVal _peca As Peca) As Lote

    Function AdicionaLoteAoLeilao(ByVal _leilao As Dominio.Leilao, ByVal _lote As Lote) As Dominio.Leilao

    Function RemoveLoteDoLeilao(ByVal _leilao As Dominio.Leilao, ByVal _lote As Lote) As Dominio.Leilao

    Function DarLance(ByVal _valor As Decimal, ByVal _lote As Lote, ByVal _usuario As Usuario) As Lance

    Sub HabilitarUsuario(ByVal _usuario As Usuario)

    Sub DesaHabilitarUsuario(ByVal _usuario As Usuario, ByVal _motivo As String)

    Function EfetivarVenda(ByVal _lote As Lote, ByVal _lanceFechamento As Lance) As Venda

    Function GerarFatura(ByVal _venda As Venda) As Fatura

    Sub CancelarFatura(ByVal _fatura As Fatura, ByVal _motivo As String)

    Sub PagarFatura(ByVal _fatura As Fatura, ByVal _valorPago As Decimal, ByVal _dataPagamento As DateTime)

    Sub AtribuirRegra(ByVal _leilao As Dominio.Leilao, ByVal _regra As RegraLeilao, ByVal _usuario As Usuario)

    Sub AtribuirRegra(ByVal _lote As Dominio.Lote, ByVal _regra As RegraLote, ByVal _usuario As Usuario)

End Interface
